home *** CD-ROM | disk | FTP | other *** search
/ Leonardo the Inventor / Leonardo The Inventor (93026)(Broderbund)(Riverdeep)(2004).iso / LEOWINMV / DATABASE.DIR / 00364_Script_SortIndex < prev    next >
Text File  |  1996-03-28  |  3KB  |  111 lines

  1. -- -----------------------------------------------------------
  2. -- Handler sortIndex cleans up the index cast members
  3. -- ensuring that there are no duplicates in search results and
  4. -- that search results are sorted alphabetically.
  5. --
  6. -- Sample Call:
  7. --
  8. -- confirmIndexCastEndsWithAsterisk 332, 357
  9. -- sortIndex 332, 357
  10. -- confirmIndexCastEndsWithAsterisk 332, 357
  11. -- extractIndexIndex 332, 357
  12. -- spreadIndexIndexToCasts 358, 360
  13.  
  14. -- -----------------------------------------------------------
  15.  
  16. on sortIndex firstCast, lastCast
  17.   repeat with c = firstCast to lastCast
  18.     put "Sorting Index Cast " & c
  19.     sortIndexCast c
  20.   end repeat
  21. end
  22.  
  23.  
  24. -- -----------------------------------------------------------
  25. -- Handler sortIndexCast cleans up one index cast member
  26.  
  27. on sortIndexCast c
  28.   set indexCastText = field c
  29.   set sortedText = sortIndexText (indexCastText)
  30.   put sortedText into field c
  31. end
  32.  
  33. -- -----------------------------------------------------------
  34. -- Handler sortIndexText cleans up text passed to it
  35.  
  36. on sortIndexText T
  37.   if T = empty then return empty
  38.   
  39.   set S = ""
  40.   
  41.   set headerLines = ""
  42.   repeat with L = 1 to the number of lines of T
  43.     if char 1 of line L of T = "*" then
  44.       put L & "," after headerLines
  45.     end if
  46.   end repeat
  47.   
  48.   put the number of chars of headerLines into numChars
  49.   if char numChars of headerLines = "," then delete char numChars of headerLines
  50.   
  51.   set numHeaders = the number of items of headerLines - 1
  52.   if numHeaders < 1 then return empty
  53.   
  54.   repeat with H = 1 to numHeaders
  55.     set firstResultLine = item H of headerLines + 1
  56.     set lastResultLine = item H + 1 of headerLines - 1
  57.     
  58.     if lastResultLine < firstResultLine then 
  59.       put "ALERT: missing data at line "&lastResultLine
  60.     end if
  61.     
  62.     set resultText = line firstResultLine to lastResultLine of T
  63.     set resultTextProcessed = SortStringAndRemoveDups(resultText)
  64.     put (line (firstResultLine - 1) of T) & RETURN & resultTextProcessed into thisResult
  65.     put thisResult after S
  66.   end repeat
  67.   
  68.   return S
  69. end
  70.  
  71.  
  72. -- -----------------------------------------------------------
  73. -- Handler sortStringAndRemoveDups sorts parameter text
  74. -- alphabetically by lines after it has removed duplicate lines
  75.  
  76. on SortStringAndRemoveDups aString
  77.   set aList = []
  78.   repeat with L = 1 to the number of lines of aString
  79.     if getPos(aList , line L of aString) = 0 then
  80.       append(aList, line L of aString)
  81.     end if
  82.   end repeat
  83.   
  84.   set listSize = count(aList)
  85.   if listSize = 0 then return empty
  86.   
  87.   sort aList
  88.   
  89.   set resultString = ""
  90.   
  91.   repeat with C = 1 to listSize
  92.     put getAt(aList, C) & RETURN after resultString
  93.   end repeat
  94.   
  95.   return resultString
  96. end 
  97.  
  98.  
  99. -- -----------------------------------------------------------
  100. -- Handler confirmIndexCastEndsWithAsterisk makes sure each
  101. -- index cast ends with an asterisk
  102.  
  103. on confirmIndexCastEndsWithAsterisk firstCast, lastCast
  104.   repeat with c = firstCast to lastCast
  105.     set numLines = the number of lines of field c
  106.     if line numLines of field c = "" then
  107.       put "*" after field c
  108.     end if
  109.     put "Last line of Index Cast " & c & RETURN & line numLines of field c
  110.   end repeat
  111. end